package com.java;

import java.util.Arrays;
import java.util.Comparator;

public class ArraysAPI {
    public static void main(String[] args) {
        // toString：将数组转为String
        System.out.println(Arrays.toString(new int[]{1, 2, 3, 4, 5, 6, 7})); // [1, 2, 3, 4, 5, 6, 7]
        
        // deepToString：将数组深度转为String
        
        // equals：判断数组内容是否相等
        System.out.println(Arrays.equals(new int[]{1}, new int[]{1})); // true
        System.out.println(Arrays.equals(new String[]{"a"}, new String[]{"a"})); // true
        System.out.println(Arrays.equals(new String[]{"a"}, new String[]{"A"})); // false
        
        // deepEquals：深度判断数组内容是否相等
        
        // copyOf：拷贝原数组内容到新数组，若新数组的长度小于原数组的长度则部分拷贝，若新数组的长度等于原数组的长度则完全拷贝，若新数组的长度大于原数组的长度则多余的补上默认值
        System.out.println(Arrays.toString(Arrays.copyOf(new int[]{1, 2, 3, 4, 5, 6, 7}, 1))); // [1]
        System.out.println(Arrays.toString(Arrays.copyOf(new int[]{1, 2, 3, 4, 5, 6, 7}, 7))); // [1, 2, 3, 4, 5, 6, 7]
        System.out.println(Arrays.toString(Arrays.copyOf(new int[]{1, 2, 3, 4, 5, 6, 7}, 10))); // [1, 2, 3, 4, 5, 6, 7, 0, 0, 0]
        
        // copyOfRange：拷贝指定范围原数组内容到新数组
        System.out.println(Arrays.toString(Arrays.copyOfRange(new int[]{1, 2, 3, 4, 5, 6, 7}, 3, 5))); // [4, 5]
        
        // fill：填充原数组所有内容，原数组被改变
        int[] fill = {1, 2, 3, 4};
        Arrays.fill(fill, -1);
        System.out.println(Arrays.toString(fill)); // [-1, -1, -1, -1]
        
        // binarySearch：二分法查在原数组中查找元素，要求数组中的元素是升序的
        System.out.println(Arrays.binarySearch(new int[]{1, 2, 3, 4, 5, 6, 7}, 7)); // 6
        
        // sort：对基本数据类型或引用数据类型进行排序，底层为快速排序。基本数据类型默认升序，引用数据类型需使用Comparator或Comparable
        int[] sort1 = {1, 4, 3, 2};
        Arrays.sort(sort1);
        System.out.println(Arrays.toString(sort1)); // [1, 2, 3, 4]
        
        Integer[] sort2 = {1, 4, 3, 2};
        Arrays.sort(sort2, new Comparator<Integer>() {
            @Override
            public int compare(Integer integer1, Integer integer2) {
                return integer2 - integer1;
                
                // 升序：参数1 - 参数2
                // 降序：参数2 - 参数1
            }
        });
        System.out.println(Arrays.toString(sort2)); // [4, 3, 2, 1]
    }
}
